import Vue from 'vue'
import Util from "@/ck/util/util";

/**
 使用vue开发中，后台传过来的数据含有时间日期的通常前端都要做进一步做处理或者格式化，常用的是使用filter来过滤数据，换一种思路，前端拿到的时间日期数据一般是一串数字的时间戳，或者是一个字符串的时间日期，所以我们可以在 String 和 Number 里定义一个格式化函数，从而实现格式化时间日期。
 * */
function dateFormatInit(){
  Date.prototype.dateFormat = String.prototype.dateFormat =Number.prototype.dateFormat = function (fmt = 'yyyy-mm-dd HH:MM:SS') {
    let date =new Date(this)
    let fmtDate = fmt
    //转化时间
    let o = {
      "y+": date.getFullYear(),
      "m+": date.getMonth() + 1,
      "d+": date.getDate(),
      "H+": date.getHours(),
      "M+": date.getMinutes(),
      "S+": date.getSeconds()
    }
    for (let key in o){
      // 正则
      let rep = new RegExp(`${key}`);
      // 是所需要的格式
      if (rep.test(fmt)){
        // 有匹配到所对应格式
        fmtDate = fmtDate.match(rep) ? fmtDate.replace(
          fmt.match(rep)[0], // 将原来的格式进行值的替换 例如 yyyy - 2019
          // String(o[key]).padStart(fmt.match(rep)[0].length, "0") // ES2017写法
          String(o[key].length ===1 ? `0${o[key]}` : `${o[key]}`)// 例 小时为 7 时，在前面加上 0 ，变成 07
        ) :"";
      }
    }
    return fmtDate;
  }
}

dateFormatInit()

/*
* 全局的过滤函数
* */
function checkAddZone(num) {
  return num < 10 ? `0${num.toString()}` : num
}

const globalFilter = {
  filterAddress(value) {
    // 过滤地址
    if (!value) return value
    const obj = value
    return `${obj.provinceName}${obj.cityName}${obj.countyName} ${obj.detailInfo}`
  },

  filterTime(value) {
    // 过滤时间戳，返回值yyyy-mm-dd
    if (!value) {
      return value
    }
    const date = new Date(value * 1000)
    const y = 1900 + date.getYear()
    const m = `0${date.getMonth() + 1}`
    const d = `0${date.getDate()}`
    const val = `${y}-${m.substring(m.length - 2, m.length)}-${d.substring(d.length - 2, d.length)}`
    return val
  },

  filterTimeYmdHms(value) {
    // 过滤时间戳，返回值yyyy-mm-dd ss
    if (!value) {
      return value
    }
    const date = new Date(value * 1000)
    const y = 1900 + date.getYear()
    const m = `0${date.getMonth() + 1}`
    const d = `0${date.getDate()}`
    const hh = date.getHours()
    const mm = `${date.getMinutes()}`
    const ss = date.getSeconds() < 10 ? `0${date.getSeconds()}` : date.getSeconds()
    const val = `${y}-${m.substring(m.length - 2, m.length)}-${d.substring(d.length - 2, d.length)}  ${hh}:${mm}:${ss}`
    return val
  },

  filterTimeYear(value) {
    // 过滤时间戳, 返回值 今年:mm-dd 往年:yyyy-mm-dd
    const jy = 1900 + new Date().getYear()
    const date = new Date(value * 1000)
    const y = 1900 + date.getYear()
    const m = `0${date.getMonth() + 1}`
    const d = `0${date.getDate()}`
    const val = `${y}-${m.substring(m.length - 2, m.length)}-${d.substring(d.length - 2, d.length)}`
    const thisYear = `${m.substring(m.length - 2, m.length)}-${d.substring(d.length - 2, d.length)}`
    if (jy === y) {
      return thisYear
    }
    return val
  },

  dateFormatter(nows) {
    if (!nows) return ''
    const now = new Date(nows)
    const year = now.getFullYear()

    let month = now.getMonth() + 1
    month = checkAddZone(month)

    let date = now.getDate()
    date = checkAddZone(date)
    return `${year}-${month}-${date}`
  },

  dateTimeFormatter(t) {
    if (!t) return ''
    t = new Date(t).getTime() // eslint-disable-line
    t = new Date(t) // eslint-disable-line
    const year = t.getFullYear()
    let month = t.getMonth() + 1
    month = checkAddZone(month)

    let date = t.getDate()
    date = checkAddZone(date)

    let hour = t.getHours()
    hour = checkAddZone(hour)

    let min = t.getMinutes()
    min = checkAddZone(min)

    let se = t.getSeconds()
    se = checkAddZone(se)

    return `${year}-${month}-${date} ${hour}:${min}:${se}`
  },

  filterTitle(value, len = 9) {
    return Util.cutString(value, len)
  },
}

// 全局过滤器
Object.keys(globalFilter).forEach(k => Vue.filter(k, globalFilter[k]))

export default globalFilter
